"""
2.1 条件选择语句 if
本小节主要学习条件选择语句“if”的用法和语法结构。使用条件选择语句后，程序的执
行不再是自上而下逐行代码依次执行，而是能够根据条件的真假（True 或 False）执行不同
的代码块，同时学习了 Python 语言中重要的缩进概念，使用缩进来表达不同的语句关系。
2.1.1 if 语句基本用法
本知识点主要学习使用 if 语句来执行对应缩进代码块的基本用法。用法是 if 语句首先
对条件进行判定，结果为 True 时执行 if 下缩进的代码块，结果为 False 时则跳过缩进的代
码块，继续执行后面的代码。if 语句的语法是：
if 条件(condition):
执行语句(缩进代码块)
"""
# 示例2.1.1.1: 使用 if 语句完成对输入学生成绩进行判定，输入学生的成绩大于等于60 分则会输出“考试通过”。
studentGrade = 80
if float(studentGrade) >= 60: # input 接收返回的是 string 类型，需要用 float 进行转换
    print('考试通过')
print('成绩检查完毕！')

print('*' * 100)

"""
【代码分析】第 2 行代码 if 语句的末尾加了“:”，第 3 行语句向右进行了缩进。
Python 中的缩进（Indentation）决定了代码的作用域范围。这一点和传统的编程语言有很大
的不同，Python 根据缩进来判断代码行与前一个代码行的关系，遇到冒号“:”则下面的语句开
始缩进，在一个“:”下同样缩进的代码属于一个代码块。
"""

"""
每行代码中开头的空格数（whitespace）用于计算该行代码的缩进级别（Indentation level），
注意一个 Tab 等于 8 个空格（whitespace），缩进级别为 0 表示无缩进空格。缩进可以使用 Tab
键和 4 个空格来表示，一旦选定了缩进的规则，整个代码都必须使用同样的规则进行缩进，本书
采用 4 个空格进行缩进。
"""

"""
【示例 2.1.1.2】使用 if 语句完成上面示例的同样功能。
"""
studentGrade = 80
if not float(studentGrade) < 60:
    print('考试通过')
print('成绩检查完毕！')

print('*' * 100)

"""
【示例 2.1.1.3】使用 if 语句完成对输入学生成绩进行的两次判定。
"""
studentGrade = 80
if float(studentGrade) >= 60:
    print('考试通过')
if float(studentGrade) < 60:
    print('考试不通过')
print('成绩检查完毕！')
print('*' * 100)

"""
【示例 2.1.1.4】使用 if 语句完成对输入学生姓名的长度进行两次判定。
"""
studentName = '张三'
if len(studentName) <= 4:
    print('姓名检查通过')
if len(studentName) > 4:
    print('姓名检查不通过')
print('姓名检查完毕！')
print('*' * 100)

"""
【示例 2.1.1.5】使用 if 语句嵌套完成对输入学生姓名长度和输入成绩的判定，如果输
入姓名长度小于等于 4 这个判定条件成立，才能进行学生成绩的输入和判定。
"""
studentName = '李四'
if len(studentName) <= 4:
    print('姓名检查通过')
    studentGrade = 80
    if float(studentGrade) >= 60:
        print('考试通过')
        
    if float(studentGrade) < 60:
        print('考试不通过')

    print('成绩检查完毕！')
print('全部检查完毕！')

print("*" * 100)


"""
2.1.2 if...else 语句基本用法
本知识点主要学习使用“if...else” 语句，根据判定条件从二个分支中选择其中一个执行
的语法。用法是 if 语句首先对条件进行判定，结果为 True 时执行 if 下缩进的代码块，结果
为 False 时则执行 else 下缩进的代码块，然后程序继续执行后面的代码， if...else 有两种语法
表达形式。
"""
"""
【示例 2.1.2.1】使用 if...else 语句，完成对输入的学生成绩是否及格进行判定。将输入
学生的成绩是否大于等于 60 作为考试通过的判定条件。
"""
studentGrade = 60
if float(studentGrade) >= 60:   # input 输入的是 string 类型，需要用 float 进行转换
    print('考试通过')
else:
    print('考试不通过')
print('成绩检查完毕！')

print("*" * 100)

"""
【示例 2.1.2.2】使用简写的 if...else 语句，完成对输入学生成绩的判定并返回相应的值。
本示例中条件为 True 则变量赋值为“考试通过”，否则变量赋值为“考试不通过”。
"""
print('现在开始执行2.1.2.2')
studentGrade =60
gradeJudge = '考试通过' if float(studentGrade) >= 60 else '考试不通过'
print(gradeJudge)

print("*" * 100)

"""
【示例 2.1.2.3】使用 if...else 嵌套语句，完成对输入学生姓名长度和成绩的判定，姓名
长度小于等于 4 则是合理的姓名长度，才能允许继续输入成绩进行判定；如果姓名长度大于
4，则输出姓名检查不通过；最后输出检查完毕的信息。
"""
studentName = input('请输入学生的姓名：')
if len(studentName) <= 4:
    studentGrade = input('请输入学生的成绩：')
    if float(studentGrade) >= 60:
        print('考试通过')
    else:
        print('考试不通过')
else:
    print("姓名检查不通过")
print('全部检查完毕！')

"""
【示例 2.1.2.4】使用 if...else 嵌套语句，实现与上例相同的功能。
"""
studentName = input('请输入学生的姓名：')
if len(studentName) > 4:
    print("姓名检查不通过")
else:
    studentGrade = input('请输入学生的成绩：')
    if float(studentGrade) < 60:
        print('考试不通过')
    else:
        print('考试通过')
print('全部检查完毕！')

"""
【示例 2.1.2.5】使用 if...else 语句嵌套，完成对输入学生成绩的进一步判定，如果输入
成绩为 0-60 为不及格，60-80 为合格，80-90 为良好，90-100 为优秀。
"""
studentGrade = input('请输入学生的成绩：')
studentGradeNum = float(studentGrade)   #  多处使用强制转换的值则使用变量存储
if studentGradeNum < 60:
    gradeJudge = '不及格'
else:
    if studentGradeNum < 80:
        gradeJudge = '合格'
    else:
        if studentGradeNum < 90:
            gradeJudge = '良好'
        else:
            gradeJudge = '优秀'
print(gradeJudge)


"""
2.1.3 if...elif...else 语句基本用法
本知识点主要学习使用“if...elif...else”来实现根据条件判定从多个分支中选择一个进行
处理的用法。if 语句首先对条件进行判定，结果为 True 时执行 if 下缩进代码块，后续可以
有多个 elif 语句进行其他条件的判定，如果结果为 True 则执行对应 elif 下的缩进代码块，if
和 elif 的结果都为 False 时则执行 else 下缩进代码块，然后程序继续执行后续代码。
if...elif...else 语句的语法形式是：
if  条件(condition):
执行语句(缩进代码块)
elif  条件(condition):
执行语句(缩进代码块)
... 
…
…
else:
执行语句(缩进代码块)
"""
"""
【示例 2.1.3.1】使用 if...elif...else 语句，完成【示例 2.1.1.5】的同样功能，如果输入成
绩为 0-60 为不及格，60-80 为合格，80-90 为良好，90-100 为优秀；也加入了对成绩输出无
效的判定。
"""
studentGrade = 60
studentGradeNum = float(studentGrade)
gradeJudge = ''
if (100 < studentGradeNum) or (studentGradeNum < 0):
    gradeJudge = '输入无效'
elif studentGradeNum < 60:
    gradeJudge = '不及格'
elif studentGradeNum < 80:
    gradeJudge = '合格'
elif studentGradeNum < 90:
    gradeJudge = '良好'
else:
    gradeJudge = '优秀'
print('期中考试成绩' + gradeJudge)

print("*" * 100)



    

